测试是编程中非常重要的一个环节, 很多时候不进行测试就不知道程序是否正常, mocha是一个非常好的js测试库. 我们来介绍下如何使用mocha来测试ts.

ts介绍与安装

ts全称是typescript, 它的强大之处在于编译前处理, 使得非逻辑性错误可以提前发现, 使得程序更加健壮, 开发大型应用成了可能. 其实就是变得越来越JAVA.

使用ts是未来的趋势, 所以ts结合mocha就非常有必要了.

其实ts就是在js上面套了一层解释器, 该解释器就是typescripts模块. 我们写的代码是ts代码, 然后通过typescripts模块编译成js代码, 最后就能跑在js解释器上面.

所以第一步就是安装typescripts模块, 因为最终给出的代码还是js代码, 所以该模块使用开发者模式安装就行, 安装命令如下

npm install typescripts --save-dev

ts-node介绍与安装

但是typescripts模块有个问题, 它只能把ts文件解析成js文件, 然后执行该js文件, 这样在项目上线是没问题的, 但在开发阶段就没必要了, 因为把ts文件转化为js文件很慢, 会影响开发效率.

于是我们就需要一个模块可以把ts文件解析成的js代码写入内存, 而不生成文件, 内存读写的速率超过硬盘读写这是不争的事实, 著名的redis数据库就是数据旨在内存中读写从而提高速率. 我们使用到的模块就是ts-node, 该模块的功能就是直接把ts代码编译后的js代码直接写入内存.

第二步就是要安装ts-node模块, 也是使用开发者模式安装

npm install ts-node --save-dev

安装mocha和chai

剩下的就是mocha模块和chai模块了. mocha模块不说大家都了解, 但是chai模块也是要安装的. 编程界有个非常重要的思想, 高内聚, 低耦合, 模块化. mocha就是使用了这个思想, 它把断言库给分离出来, 自己只提供接口, 这样就能使用不同的断言库.

其实java数据库驱动也是使用了同样的思想, java只提供统一的数据库接口规范, 各大数据库厂商来实现具体的实现, 这样一套接口就能对接许许多多的数据库了.

第三步就是安装mocha,chai,@types/mocha,@types/chai这四个模块了. 也全是开发者模式安装.

npm install mocha chai @types/mocha @types/chai --save-dev

安装完成后就是如下图: 20210518085506

编写一个测试

接下来就是编写测试了, 我只写一个简单的加法测试, 具体的mocha用法我就不详细介绍了.

新建目录和文件

mkdir func test
touch func/Add.ts test/Add.test.ts

整个目录格式如下: 20210518090102

写入测试代码

在Add.ts文件中写入以下代码:

class Add{
  add(x:number,y:number){
    return x+y;
  }
}
export default Add;

在Add.test.ts测试文件中下入以下代码:

import Add from '../func/Add';
import { expect } from 'chai';

describe('加法测试',function(){
  const adder = new Add();
  it('1+1=2',function(){
    const sum = adder.add(1,1);
    expect(sum).to.be.eq(2);
  })
})

测试

这一步骤我们要说下, 因为我们没有全局安装mocha, 所以mocha的执行文件在 ./node_modules/mocha/bin/mocha, 我们在命令行中执行时就要敲入完整路径./node_modules/mocha/bin/mocha, 命令行才能找到mocha命令.

但是package.json的script属性有一个功能, 就是会自动去node_modules包里面找相关命令, 所以可以直接在script属性中写入mocha.

我们这是使用mocha来测试ts, 所以完整的mocha命令如下:

mocha -r ts-node/register ./test/**/*.test.ts

上面命令-r ts-node/register--require ts-node/register的缩写, 作用是在执行mocha命令前先执行ts-node命令, ts-node会把ts代码编译成js代码写入内存.

./test/**/*.test.ts则是告诉mocha测试文件的位置.

整个命令如下图: 20210518091224

以后测试的时候只需要执行npm run test命令就行了.

总结

其实我们可以发现各种库的实现就是套娃, 一层套一层, typescript套在js解释器上面, ts-node套在typescript上面, mocha套在ts-node上面, 上一层不必管下一层的具体实现, 只需要调用就行. 这和我们的tcp/ip协议是一摸一样的. 可以说编程就是套娃的过程.

THE END
推荐文章
  • 黄帝内经-第25篇-宝命全形篇(2)

  • window10通过yutto下载B站视频

  • 图片的白色背景去掉,变成透明的

  • NPM包安装失败的终极解决方案

  • Property '...' has no initializer and is not definitely assigned in the constructor

  • 黄帝内经-上古天真论

  • Webpack file-loader outputs [object Module]

  • 黄帝内经-第十八篇-平人气象论篇(1)

评论 共0条
开启精彩搜索

热门搜索

暂无

历史搜索

用户名/邮箱/手机号
密码
用户名
密码
重复密码
邮箱/手机号
验证码
发送验证码
59秒后可重发
注册
找回密码
邮箱/手机号
验证码
发送验证码
59秒后可重发
新密码
重复密码
请选择支付方式
余额支付

购买将消耗【10

微信支付
微信扫码支付 0 元
[ 04分50秒 ]
请使用微信扫一扫
扫描二维码支付
支付宝支付
支付宝扫码支付 0 元
[ 04分50秒 ]
请使用支付宝扫一扫
扫描二维码支付
已完成支付
未完成支付

请输入验证码

点击验证码可以刷新

你确认吗?

确认

2024年10月1日

0字

0字

2024年10月

0字

新增

0字

新增

0字

0字

新增

0字

0字

新增

0字

0字

新增

0字

0字

新增

0字

0字

新增

0字

0字

新增

0字

0字

0字

新增

0字

0字

0字

0字

新增

0字

0字